/**
 * <p><b>Classe Application permettant de simuler une transmission logique parfaite</b></p>
 * 
 * <p><b>Elle cree une source fixe (ou aleatoire si un argument a ete fourni a l'application
 *       qu'elle connecte a la fois a une sonde logique d'entree et a un transmetteur parfait.</b></p>
 *       
 * <p><b>Le transmetteur a son tour est connecte a une sonde logique de sortie et une destination finale.
 *       Cette application fournit aussi le taux d'erreur binaire associe a une transmission.</b></p>
 * 
 * @author Jean-Loup TAILLEFUMIRE 
 * @author Ronan LOUZAOUEN
 * @author Boubacar SOLLY
 * @author Vincent LEBRIS
 * @date septembre - octobre 2012
 */

public class ApplicationTransmissionLogiqueParfaiteAvecTransducteur2 {

	/**
	 * Tester l'Application chaine de transmission logique parfaite.
	 */
	public static void main(String[] args) {		
		//creation des elements de transmission
		Source<Boolean> source =  new SourceFixe ();
		TransmetteurParfait <Boolean> tp = new TransmetteurParfait <Boolean> ();
		DestinationFinale <Boolean> df = new DestinationFinale <Boolean> ();
		TransducteurEmission te = new TransducteurEmission();
		TransducteurReception tr = new TransducteurReception();
		
		//creation des sondes
		SondeLogique sondeEntree = new SondeLogique ("Entree fixe");
		SondeLogique sondeSortieTransmetteurParfait = new SondeLogique ("Sortie transmetteur parfait");
		SondeLogique sondeSortieTransducteurEmission = new SondeLogique ("Sonde sondeSortieTransducteurEmission");
		SondeLogique sondeSortieTransducteurReception = new SondeLogique ("Sonde sondeSortieTransducteurReception");

		//connection de la 1ere sonde et du transducteur a la source
		source.connecter(sondeEntree);
		source.connecter(te);
		
		te.connecter(tp);
		te.connecter(sondeSortieTransducteurEmission);
		
		//connection de la 2nde sonde et de la destination finale a la source
		tp.connecter(tr);
		tp.connecter(sondeSortieTransmetteurParfait);
		
		tr.connecter(df);
		tr.connecter(sondeSortieTransducteurReception);
		
		try {
			//debut de la transmission
			source.emettre();
		} catch (InformationNonConforme e) {
			e.printStackTrace();
		}
		
		//Calcul du TEB
		float teb = -1.0f;
		
		try {
			teb = CalculateurTauxErreurBinaire.calculTauxErreurBinaire(source, df);
		} catch (InformationNonConforme e) {
			e.printStackTrace();
		}
		
		System.out.println("Valeur du taux d'erreur binaire pour cette transmission: " + teb);
	}

}
